﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>

//给你一个长度为 n 的整数数组 nums ，请你返回 nums 中最 接近 0 的数字。
//如果有多个答案，请你返回它们中的 最大值 。
// 稍微优化了一下
//int findClosestNumber(int* nums, int numsSize)
//{
//	int maxAbs = abs(nums[0] - 0);
//	int max = nums[0];
//	int i = 0;
//	for (i = 1; i < numsSize; i++)
//	{
//		if (maxAbs >= abs(nums[i] - 0))
//		{
//			if (maxAbs > abs(nums[i] - 0))
//			{
//				maxAbs = abs(nums[i] - 0);
//				max = nums[i];
//			}
//			else
//			{
//				if (nums[i] > max)
//				{
//					max = nums[i];
//					maxAbs = abs(nums[i] - 0);
//				}
//			}
//		}
//	}
//	return max;
//}
//int main()
//{
//	int arr[] = { -4,-2,1,4,8 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int ret = findClosestNumber(arr, sz);
//	printf("%d", ret);
//	return 0;
//}

//子字符串 是字符串中的一个连续的字符序列。
//给你一个字符串 num ，表示一个大整数。
//请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ，并以字符串形式返回。
//如果不存在奇数，则返回一个空字符串 "" 。
//子字符串 是字符串中的一个连续的字符序列。
//稍微优化了一下。
//从后往前开始遍历，如果遇到奇数，就将后一个变为'\0’，然后返回原字符串。否则就直到循环结束，直接返回"";因为着说明字符串没有全是偶数。
//char* largestOddNumber(char* num)
//{
//	int len = strlen(num);
//	if ((num[len-1]-'0')%2==1)
//	{
//		return num;
//	}
//	else
//	{
//		int i = len - 1;
//		for (i; i >= 0; i--)
//		{
//			if ((num[i] - '0') % 2 == 1)
//			{
//				num[i + 1] = '\0';
//				return num;
//			}
//		}
//	}
//	return "";
//}
//int main()
//{
//	char p1[] = "2";
//	char* p2 = largestOddNumber(p1);
//	printf("%s", p2);
//	return 0;
//}

//给定两个排序后的数组 A 和 B，其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法，将 B 合并入 A 并排序。
//初始化 A 和 B 的元素数量分别为 m 和 n。//将代码简化了
// 
//int cmpfunc(const void* a, const void* b)
//{
//	return (*(int*)a - *(int*)b);
//}
//
//void merge(int* A, int ASize, int m, int* B, int BSize, int n)
//{
//	int i = 0;
//	int j = 0;
//	for (i = m; i < m + n; i++)
//	{
//		A[i] = B[j++];
//	}
//	qsort(A, n + m, sizeof(int), cmpfunc);
//	return A;
//}

//给你一个二进制字符串 s ，该字符串 不含前导零 。
//如果 s 包含 零个或一个由连续的 '1' 组成的字段 ，返回 true​​​ 。否则，返回 false 。
//减少了了内存消耗
//bool checkOnesSegment(char* s)
//{
//	int right = strlen(s) - 1;
//	int left = 1;
//	while (1)
//	{
//		if (s[left] == '1')
//		{
//			left++;
//		}
//		else
//		{
//			while (right > left)
//			{
//				if (s[right] == '1')
//					return false;
//				right--;
//			}
//			goto end;
//		}
//	}
//end:
//	return true;
//}
//int main()
//{
//	char p[] = "1000";
//	checkOnesSegment(p);
//	return 0;
//}

//给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
//请必须使用时间复杂度为 O(log n) 的算法。
// 优化了一下
//int searchInsert(int* nums, int numsSize, int target)
//{
//	int left = 0;
//	int right = numsSize-1;
//	while (right >= left)
//	{
//		int mid = (left + right) / 2;
//		if (nums[mid] == target)
//			return mid;
//		else if (nums[mid] > target)
//			right = mid - 1;
//		else
//			left = mid + 1;
//	}
//	return left;
//}
//int main()
//{
//	int arr[] = { 1,3,5,6 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int k = 4;
//	int ret = searchInsert(arr, sz, k);
//	printf("%d", ret);
//	return 0;
//}

